Load balancers distribute network traffic between two or more compute devices. In doing so, the network load balancer can balance processing workloads, provide redundancy, provide scalability, and increase availability in a computer network. In some environments, a load balancer distributes incoming network traffic between interfaces of a single logical entity. Further, a load balancer may be programmed as part of the hardware of a network device, such as a network switch.
Generally, a load balancer may determine a destination for network traffic using a hash function, such as a cyclic redundancy check (CRC) algorithm. The resulting value from the hash function is then used to determine an index to a bin that maps to a given destination (e.g., a port number or host address). In some cases, the hash function is programmed on the hardware of the network device. For instance, CRC32 is a typical hash function that is programmed on network device hardware for load balancing, often for cost considerations. While hash functions such as CRC32 are generally effective for load balancing large uniform input distributions, using such hash functions may produce unfairness scenarios (e.g., scenarios where traffic is distributed heavily to one destination over others) with non-uniform sequential distributions. Non-uniform sequential distributions are common in data centers where compute devices are assigned sequential network addresses (e.g., media access control (MAC) or Internet Protocol (IP) addresses).